<?php

function ups($dest_zip,$service,$weight) {

    // This script was written by Mark Sanborn at http://www.marksanborn.net
    // If this script benefits you are your business please consider a donation
    // You can donate at http://www.marksanborn.net/donate.

    $configarray = file("./configurational/ups.php");
    $accesslicensenumberstring = "";
    $useridstring = "";
    $passwordstring = "";
    $postalcodestring = "";
    $shippernumberstring = "";
    $UPSWebserviceUrlstring = "";
    foreach($configarray as $key => $value)
    {
        if(strpos($value, "accesslicensenumber") !== false)
        {
           $accesslicensenumberstring = $value; 
        }
        if(strpos($value, "userid") !== false)
        {
            $useridstring = $value;
        }
        if(strpos($value, "password") !== false)
        {
            $passwordstring = $value;
        }
        if(strpos($value, "postalcode") !== false)
        {
            $postalcodestring = $value;
        }
        if(strpos($value, "shippernumber") !== false)
        {
            $shippernumberstring = $value;
        }
        if(strpos($value, "UPSWebserviceUrl") !== false)
        {
           $UPSWebserviceUrlstring = $value; 
        }
       
    }
    $accesslicensenumberArray = explode("=", $accesslicensenumberstring);
    $useridArray = explode("=", $useridstring);
    $passwordArray = explode("=", $passwordstring);
    $postalcodeArray = explode("=", $postalcodestring);
    $shippernumberArray = explode("=", $shippernumberstring);
    $UPSWebserviceUrlArray = explode("=", $UPSWebserviceUrlstring);
    
    $AccessLicenseNumber = trim($accesslicensenumberArray[1]); // Your license number
    $UserId = trim($useridArray[1]); // Username
    $Password = trim($passwordArray[1]); // Password
    $PostalCode = trim($postalcodeArray[1]); // Zipcode you are shipping FROM
    $ShipperNumber = trim($shippernumberArray[1]); // Your UPS shipper number           
    $url = trim($UPSWebserviceUrlArray[1]);
    
 

    // =============== DON'T CHANGE BELOW THIS LINE ===============


        $data ="<?xml version=\"1.0\"?>
        <AccessRequest xml:lang=\"en-US\">
            <AccessLicenseNumber>$AccessLicenseNumber</AccessLicenseNumber>
            <UserId>$UserId</UserId>
            <Password>$Password</Password>
        </AccessRequest>
        <?xml version=\"1.0\"?>
        <RatingServiceSelectionRequest xml:lang=\"en-US\">
            <Request>
                <TransactionReference>
                    <CustomerContext>Bare Bones Rate Request</CustomerContext>
                    <XpciVersion>1.0001</XpciVersion>
                </TransactionReference>
                <RequestAction>Rate</RequestAction>
                <RequestOption>Rate</RequestOption>
            </Request>
        <PickupType>
            <Code>01</Code>
        </PickupType>
        <Shipment>
            <Shipper>
                <Address>
                    <PostalCode>$PostalCode</PostalCode>
                    <CountryCode>US</CountryCode>
                </Address>
            <ShipperNumber>$ShipperNumber</ShipperNumber>
            </Shipper>
            <ShipTo>
                <Address>
                    <PostalCode>$dest_zip</PostalCode>
                    <CountryCode>US</CountryCode>
                <ResidentialAddressIndicator/>
                </Address>
            </ShipTo>
            <ShipFrom>
                <Address>
                    <PostalCode>$PostalCode</PostalCode>
                    <CountryCode>US</CountryCode>
                </Address>
            </ShipFrom>
            <Service>
                <Code>$service</Code>
            </Service>
            <Package>
                <PackagingType>
                    <Code>02</Code>
                </PackagingType>
                <PackageWeight>
                    <UnitOfMeasurement>
                        <Code>LBS</Code>
                    </UnitOfMeasurement>
                    <Weight>$weight</Weight>
                </PackageWeight>
            </Package>
        </Shipment>
        </RatingServiceSelectionRequest>";
      
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_TIMEOUT, 60);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
        $result=curl_exec ($ch);
    echo '<!-- '. $result. ' -->'; // THIS LINE IS FOR DEBUG PURPOSES ONLY-IT WILL SHOW IN HTML COMMENTS
        $data = strstr($result, '<?');
        $xml_parser = xml_parser_create();
        xml_parse_into_struct($xml_parser, $data, $vals, $index);
        xml_parser_free($xml_parser);
        $params = array();
        $level = array();
        foreach ($vals as $xml_elem) {
         if ($xml_elem['type'] == 'open') {
        if (array_key_exists('attributes',$xml_elem)) {
             list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
        } else {
             $level[$xml_elem['level']] = $xml_elem['tag'];
        }
         }
         if ($xml_elem['type'] == 'complete') {
        $start_level = 1;
        $php_stmt = '$params';
        while($start_level < $xml_elem['level']) {
             $php_stmt .= '[$level['.$start_level.']]';
             $start_level++;
        }
        
        if (isset($xml_elem['value'])) 
        {
            $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
        }
        else 
        {
            $php_stmt .= '[$xml_elem[\'tag\']] = "";';
        }
        
        
        eval($php_stmt);
         }
        }
        curl_close($ch);
        
     
        
        return $params['RATINGSERVICESELECTIONRESPONSE']['RATEDSHIPMENT']['TOTALCHARGES']['MONETARYVALUE'];
    }
?>



